#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/socket.h>
#include <netdb.h>
#include <stdarg.h>
#include <errno.h>
#include <stdbool.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <time.h>
#include<regex.h>
#include <openssl/ssl.h>
#include <openssl/err.h>

#define TAILLE_BUFF 1000


typedef struct {
	int taille;
  	int taille_reservee;
  	char *tab;
} t_ligne;

t_ligne *ligne_new(int taille_dep);

void ajout_ligne(t_ligne *l, const void *tab, const int tailletab);

void sup_ligne(t_ligne *l, int free_tab);

int init_connect(const char *port, const char * host);

int EnvoieMessage(int s , char* format , ... );

void affichage(char *buff);
int donnePort(char *buff);

int RecoieDonnees(int fd , int s );

char* recoie_donnees(int s);

void login(int s,char *user,char *pass);

void login_SSL(SSL* ssl,char *user,char *pass);

void connectDonnee(char * port, char * ip, int s, char * commande);

void connecDeDonnee2(char * port, char * ip, int s, char * commande, char * fichier);

void envoieDonnees(int fd, int s);

void connectRETR(char * port, char * ip, int s, char * commande, char * fichier);

void connectLIST(char * port, char * ip, int s, char * commande);

char * recoie_donnees_SSL(SSL* ssl);

void connectSTOR(char * port, char * ip, int s,char * commande, char * fichier);

void connectSTOR_SSL(char * port, char * ip, SSL *ssl,char * commande, char * fichier);

int EnvoieMessageSSL(SSL *ssl, char* format, ...);

void connectRETR_SSL(char * port, char * ip,SSL *ssl, char * commande, char * fichier);

void connectDonnee_ssl(char * port, char * ip,SSL *ssl, char * commande);

void connectLIST_SSL(char * port, char * ip,SSL *ssl, char * commande);

SSL * chiffrerSSL(int s);

void aide();
